#pragma once
#include<iostream>
#include<unordered_map>
#include<functional>
#include<ctime>
#include <sys/types.h>
#include <unistd.h>


using task_t = std::function<void()>;
//模拟下载-任务
void DownLoad()
{
    std::cout << "我是56下载....,pid:" << getpid() << std::endl;
}
//模拟日志-任务
void Log()
{
    std::cout << "我是日志....,pid:" << getpid() << std::endl;
}
//模拟数据库同步-任务 
void sql()
{
    std::cout << "我是数据库同步....,pid:" << getpid() << std::endl;
}
static int numbr = 0;
//任务类
class taskmap
{ 
    
public:
    
    taskmap()
    {
        //随机数种子
        srand(time(nullptr));
        //装好任务
        instask(DownLoad);
        instask(Log);
        instask(sql);
    }
    //插入一个任务方法和任务码
    void instask(task_t t)
    {
         tasks[numbr++] = t;
    }
    //选择任务
    int selectask()
    {
        //返回数据数
        return rand() % numbr;
    }
    //根据numbr执行任务
    void excute(int numbr)
    {
        //找不到return什么都不做
         if(tasks.find(numbr) == tasks.end())return;
         //找到了，执行numbr任务码的方法
         tasks[numbr]();
    }

    ~taskmap()
    {

    }

private:
    //哈希表
    std::unordered_map<int,task_t> tasks;
};
taskmap tm;
